﻿using System;
using System.IO;
using System.Data;
using System.Windows;
using System.Collections;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows.Controls;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls;
using Sinacor.UI.Bovespa.Corretagem.Model;
using Sinacor.UI.Bovespa.Corretagem.Presenter;
using Sinacor.Infra.UI.Controls.SmartClient;
using System.Collections.Generic;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;

namespace Sinacor.UI.Bovespa.Corretagem.View.SmartClient
{
    /// <summary>
    /// Interaction logic for CadastroTaxa.xaml
    /// </summary>
    public partial class CadastroTaxa : SinacorWindow,ICadastroTaxa 
    {
        #region Campos

        public Presenter.CadastroTaxa PresenterCadastroTaxa { get; set; }

        #region Constante

        #region Mensagens
        public const string informarcodigobolsaobrigatorio = "Bovespa.Corretagem.ExceptionMessage.CodigoBolsaObrigatorio";

        public const string Informardatafinalmenordatainicial = "Bovespa.Corretagem.ExceptionMessage.DataFinalMaiorDataInicio";
        public const string Informardatafinalobrigatoria = "Bovespa.Corretagem.ExceptionMessage.DataFinalObrigatorio";

        public const string Informardatainicialobrigatoria = "Bovespa.Corretagem.ExceptionMessage.DataInicialObrigatoria";
        public const string Informarmaisfiltropesquisa = "Bovespa.Corretagem.ExceptionMessage.InformeMaisFiltrosPesquisa";
        public const string Informarmercadoobrigatorio = "Bovespa.Corretagem.ExceptionMessage.MercadoObrigatorio";

        public const string Informarmercadoorigemobrigatorio = "Bovespa.Corretagem.ExceptionMessage.MercadoOrigemObrigatorio";
        public const string Informarnaturezaoperacaoobrigatoria = "Bovespa.Corretagem.ExceptionMessage.NaturezaOperacaoObrigatorio";
        public const string Informarnenhumataxaencontrada = "Bovespa.Corretagem.Message.PesquisaSemResultado";

        public const string Informarperiodoinvalido= "Bovespa.Corretagem.ExceptionMessage.PeriodoInvalido";
        public const string Informartaxaalteradasucesso = "Bovespa.Corretagem.Message.AlteracaoRealizadaSucesso";
        public const string Informartaxaexcluidasucesso = "Bovespa.Corretagem.Message.ExclusaoRealizadaSucesso";

        public const string Informartaxaincluidasucesso = "Bovespa.Corretagem.Message.InclusaoRealizadaSucesso";
        public const string Informartipoclienteobrigatorio = "Bovespa.Corretagem.ExceptionMessage.TipoClienteObrigatorio";
        public const string Informartipoliquidacaoobrigatorio= "Bovespa.Corretagem.ExceptionMessage.TipoLiquidacaoObrigatorio";

        public const string Informartipooperacaoobrigatorio = "Bovespa.Corretagem.ExceptionMessage.TipoOperacaoObrigatorio";
        public const string Informartipopapelobrigatorio = "Bovespa.Corretagem.ExceptionMessage.TipoPapelObrigatorio";

        public const string Informarpercemolumentobovespaobrigatorio = "Bovespa.Corretagem.ExceptionMessage.InformePercentualBovespa";

        public const string Informarpercemolumentocblcobrigatorio = "Bovespa.Corretagem.ExceptionMessage.InformePercEmolumentoCBLC";

        public const string Informarpercregistrobovespaobrigatorio = "Bovespa.Corretagem.ExceptionMessage.InformePercRegistroBovespa";

        public const string Informarpercregistrocblcobrigatorio = "Bovespa.Corretagem.ExceptionMessage.InformePercRegistroCBLC";


        #endregion

        #region controles
        public const string OperacaoTpt = "cboOperacaoTpt";
        public const string BolsaTpt = "cboBolsaTpt";
        public const string MercadoTpt = "cboMercadoTpt";

        public const string MercadoOrigemTpt = "cboMercadoOrigemTpt";
        public const string ClienteTpt = "cboClienteTpt";
        public const string AtivoTpt = "cboAtivoTpt";

        public const string LiquidacaoTpt = "cboLiquidacaoTpt";
        public const string CompraTpt = "rdbCompraTpt";
        public const string VendaTpt = "rdbVendaTpt";

        public const string InicioTpt = "dtpInicioTpt";
        public const string FimTpt = "dtpFimTpt";

        public const string ValorEmolumentoBovespaTpt = "txtValorEmolumentoBovespaTpt";
        public const string ValorEmolumentoCBLCTpt = "txtValorEmolumentoCBLCTpt";
        public const string ValorRegistroBovespaTpt = "txtValorRegistroBovespaTpt";

        public const string ValorRegistroCBLCTpt = "txtValorRegistroCBLCTpt";

        #endregion

        #endregion

        #endregion

        #region Construtores

        public CadastroTaxa()
        {
            InitializeComponent();

            PresenterCadastroTaxa = new Presenter.CadastroTaxa(this);

            dtgTaxas.NewItemType = typeof(Model.Taxa);

            DataContext = PresenterCadastroTaxa;

            AfterInitialize += new RoutedEventHandler(Inicializar);

        }

        #endregion

        #region Eventos

        private void Inicializar(object sender, RoutedEventArgs e)
        {
            ShowUserWaitingProcess();

            PresenterCadastroTaxa.ConsultarBolsas();
            PresenterCadastroTaxa.ConsultarMercados();

            #region Carrega Combo Template

            PresenterCadastroTaxa.CarregarOperacao();
            PresenterCadastroTaxa.CarregarBolsa();
            PresenterCadastroTaxa.CarregarMercadoEdit();

            PresenterCadastroTaxa.CarregarMercadoOrigemEdit();
            PresenterCadastroTaxa.CarregarClientes();
            PresenterCadastroTaxa.CarregarAtivo();

            PresenterCadastroTaxa.CarregarLiquidacao();

            #endregion

            HideUserWaitingProcess();
        }

        private void btnPesquisar_Click(object sender, RoutedEventArgs e)
        {
            if (!ValidaFiltro()) return;
            ClearServiceErrors();
 
            ShowUserWaitingProcess();

            #region Filtro

            #region Natureza Operação
                if (rdbCompra.IsChecked.Value)
                    PresenterCadastroTaxa.FiltroTaxa.NaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Compra;
                else if (rdbVenda.IsChecked.Value)
                    PresenterCadastroTaxa.FiltroTaxa.NaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Venda;
                else
                    PresenterCadastroTaxa.FiltroTaxa.NaturezaOperacao = null;
            #endregion

            #region Periodo
            if (dtpInicio.Value.HasValue && dtpFim.Value.HasValue)
            {
                PresenterCadastroTaxa.FiltroTaxa.Periodo = new Model.Periodo
                {
                    DataInicial = dtpInicio.Value,
                    DataFinal = dtpFim.Value
                };
            }
            else
                PresenterCadastroTaxa.FiltroTaxa.Periodo = null;
            #endregion

            #region Bolsa
            if (cboBolsa.SelectedIndex <= -1)
                PresenterCadastroTaxa.FiltroTaxa.Bolsa = null;
            else
                PresenterCadastroTaxa.FiltroTaxa.Bolsa = cboBolsa.SelectedValue.ToString();
            #endregion

            #region Mercado
            if (cboMercado.SelectedIndex <= -1)
                PresenterCadastroTaxa.FiltroTaxa.Mercado = null;
            else
                //PresenterCadastroTaxa.FiltroTaxa.Mercado = ((EnumWrapper<Model.Enum.TipoMercado>)cboMercado.SelectedItem).Value;
                PresenterCadastroTaxa.FiltroTaxa.Mercado = cboMercado.SelectedValue.ToString();
            #endregion

            #region Mercado Origem
            if (cboMercadoOrigem.SelectedIndex <= -1)
                PresenterCadastroTaxa.FiltroTaxa.MercadoOrigem = null;
            else
                //PresenterCadastroTaxa.FiltroTaxa.MercadoOrigem = ((EnumWrapper<Model.Enum.TipoMercado>)cboMercadoOrigem.SelectedItem).Value;
                PresenterCadastroTaxa.FiltroTaxa.MercadoOrigem = cboMercadoOrigem.SelectedValue.ToString();
            #endregion 

            #endregion

            PresenterCadastroTaxa.ConsultarTaxas(PresenterCadastroTaxa.FiltroTaxa); 
            HideUserWaitingProcess();
        }

        private void btnNovaPesquisa_Click(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
            PresenterCadastroTaxa.LimparPesquisa();
        }

        private void dtgTaxas_Deleting(object sender, CancelItemsEventArgs e)
        {
            if(ConfirmarExclusaoTaxa())
            {
                Model.Taxa itemtaxa = ((Model.Taxa)dtgTaxas.SelectedItem);
                Model.ChaveTaxa chaveTaxa = new ChaveTaxa();

                if (itemtaxa != null)
                {
                    chaveTaxa.Cliente = itemtaxa.Cliente;
                    chaveTaxa.CodigoBolsa  = itemtaxa.CodigoBolsa;
                    chaveTaxa.Liquidacao = itemtaxa.Liquidacao;
 
                    chaveTaxa.Mercado = itemtaxa.Mercado;
                    chaveTaxa.MercadoOrigem = itemtaxa.MercadoOrigem;
                    chaveTaxa.NaturezaOperacao = itemtaxa.NaturezaOperacao;
  
                    chaveTaxa.Operacao = itemtaxa.Operacao;
                    chaveTaxa.Papel =itemtaxa.Papel;
                    chaveTaxa.Periodo = new Periodo{
                                            DataInicial = itemtaxa.Periodo.DataInicial,   
                                            DataFinal = itemtaxa.Periodo.DataFinal 
                                        };  
                }
                ClearServiceErrors(); 
                PresenterCadastroTaxa.ExcluirTaxa(chaveTaxa);

                if (HasErrors)
                    e.Cancel = true;
  
            }
            else
                 e.Cancel = true;
        }

        private void dtgTaxas_InsertEditBegun(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                Model.Taxa baseline = ((Model.Taxa)e.ItemInfo.Item);

                MensagemControlesFormulario(e);
                
                bool controle = e.ItemInfo.State == State.Inserted? true:false;

                ControlesObrigatoriosFormulario(e, controle);
                PesquisaEditar(false);

                if (e.ItemInfo.State == State.Inserted)
                {
                    ControlesObrigatoriosFormulario(e, false);
                    LimparControlesFormulario(e);
                }
                else if (e.ItemInfo.State == State.Updated)
                {
                    switch (baseline.NaturezaOperacao)
                    {
                        case Model.Enum.TipoNaturezaOperacao.Compra:
                            RadioButton(e, CompraTpt).IsChecked = true;
                            break;
                        case Model.Enum.TipoNaturezaOperacao.Venda:
                            RadioButton(e, VendaTpt).IsChecked = true;
                            break;
                        default:
                            break;
                    }

                    DatePicker(e, InicioTpt).Value = baseline.Periodo.DataInicial;
                    DatePicker(e, FimTpt).Value = baseline.Periodo.DataFinal;
                }

                AtualizarCombo(e, OperacaoTpt);
                AtualizarCombo(e, BolsaTpt);
                AtualizarCombo(e, MercadoTpt, "Descricao");

                AtualizarCombo(e, MercadoOrigemTpt, "Descricao");
                AtualizarCombo(e, ClienteTpt);
                AtualizarCombo(e, AtivoTpt);

                AtualizarCombo(e, LiquidacaoTpt);

                FormularioEditar(e, controle);
            }
        }

        private void dtgTaxas_EndingInsert(object sender, CancelItemEventArgs e)
        {
            try
            {
                if (e.OriginalSource is BaseRow)
                {
                    ClearServiceErrors();
 
                    bool controle = e.ItemInfo.State == State.Inserted? true:false;
                    ControlesObrigatoriosFormulario(e,controle);

                    ValidaFormulario(e);
                         
                    if (!((IValidatableContainer)sender).ValidateContainer() || HasErrors)
                    {
                        e.Cancel = true;
                        return;
                    }

                    Model.Taxa baseline = ((Model.Taxa)e.ItemInfo.Item);

                    #region Preenche Linha

                    baseline.Cliente = ((EnumWrapper<Model.Enum.TipoCliente>)ComboBox(e, ClienteTpt).SelectedItem).Value;
                    baseline.CodigoBolsa = ComboBox(e, BolsaTpt).SelectedValue.ToString();
                    baseline.NomeBolsa = ComboBox(e, BolsaTpt).Text;

                    baseline.Liquidacao = ((EnumWrapper<Model.Enum.TipoLiquidacao>)ComboBox(e, LiquidacaoTpt).SelectedItem).Value;

                    baseline.Mercado = ComboBox(e, MercadoTpt).SelectedValue.ToString();
                    baseline.NomeMercado = ComboBox(e, MercadoTpt).Text;

                    baseline.MercadoOrigem = ComboBox(e, MercadoOrigemTpt).SelectedValue.ToString(); ;
                    baseline.NomeMercadoOrigem = ComboBox(e, MercadoOrigemTpt).Text;

                    baseline.Operacao = ((EnumWrapper<Model.Enum.TipoOperacao>)ComboBox(e, OperacaoTpt).SelectedItem).Value;
                    baseline.Papel = ((EnumWrapper<Model.Enum.TipoPapel>)ComboBox(e, AtivoTpt).SelectedItem).Value;

                    if (RadioButton(e, CompraTpt).IsChecked.Value)
                        baseline.NaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Compra;

                    if (RadioButton(e, VendaTpt).IsChecked.Value)
                        baseline.NaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Venda;


                    baseline.Periodo = new Model.Periodo
                    {
                        DataInicial = DatePicker(e, InicioTpt).Value,
                        DataFinal = DatePicker(e, FimTpt).Value
                    };

                    baseline.PercEmoluentoBovespa = DecimalTextBox(e, ValorEmolumentoBovespaTpt).Value.Value;
                    baseline.PercEmoluentoCBLC = DecimalTextBox(e, ValorEmolumentoCBLCTpt).Value.Value;

                    baseline.PercRegistroBovespa = DecimalTextBox(e, ValorRegistroBovespaTpt).Value.Value;
                    baseline.PercRegistroCBLC = DecimalTextBox(e, ValorRegistroCBLCTpt).Value.Value;

                    #endregion

                    PresenterCadastroTaxa.IncluirTaxa(baseline);

                    if(HasErrors)
                        e.Cancel = true;
                }
            }
            catch
            {
                e.Cancel = true;
            }
            finally
            {
                PesquisaEditar(true);
            }
        }
        
        private void dtgTaxas_EndingUpdate(object sender, CancelItemEventArgs e)
        {
            try
            {
                if (e.OriginalSource is BaseRow)
                {
                    ClearServiceErrors();

                    bool controle = e.ItemInfo.State == State.Inserted ? true : false;
                    ControlesObrigatoriosFormulario(e, controle);
                    
                    ValidaFormulario(e);

                    if (!((IValidatableContainer)sender).ValidateContainer() || HasErrors)
                    {
                        e.Cancel = true;
                        return;
                    }


                    Model.Taxa baseline = ((Model.Taxa)e.ItemInfo.Item);

                    #region Preenche Linha
             
                    baseline.CodigoBolsa = ComboBox(e, BolsaTpt).SelectedValue.ToString();
                    baseline.Mercado = ComboBox(e, MercadoTpt).SelectedValue.ToString();
                    baseline.NomeMercado = ComboBox(e, MercadoTpt).Text;
                    
                    #endregion

                    PresenterCadastroTaxa.AlterarTaxa(baseline);

                    if (HasErrors)
                        e.Cancel = true;
                }
            }
            catch
            {
                e.Cancel = true;
            }
            finally
            {
                PesquisaEditar(true);
            }
        }

        private void dtgTaxas_CancelingInsertEdit(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
                PesquisaEditar(true);
        }
        
        private void Cancelar_Click(object sender, RoutedEventArgs e)
        {
            if (dtgTaxas.IsInserting)
                dtgTaxas.CancelInsert();

            else if (dtgTaxas.IsEditing)
                dtgTaxas.CancelUpdate();
        }
        private void Salvar_Click(object sender, RoutedEventArgs e)
        {            
           if(dtgTaxas.IsInserting)
               dtgTaxas.EndInsert();

           else if(dtgTaxas.IsEditing) 
               dtgTaxas.EndUpdate();
        }
     
        private void rdbCompraTpt_Checked(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
        }

        private void rdbVendaTpt_Checked(object sender, RoutedEventArgs e)
        {
            ClearServiceErrors();
        }

        #endregion
        
        #region Métodos

        #region Private

        private bool ValidaFiltro()
        {
            bool filtro = false;

            #region Natureza Operação

            if (!rdbCompra.IsChecked.Value && !rdbVenda.IsChecked.Value)
            {
                InformarNaturezaOperacaoObrigatoria();
                return false;
            }
            #endregion

            #region Periodo
            if (dtpInicio.Value.HasValue && dtpFim.Value.HasValue)
            {
                if (dtpFim.Value < dtpInicio.Value)
                {
                    InformarPeriodoInvalido();
                    return false;
                }
                filtro = true;
            }
            else
            {
                if (dtpInicio.Value.HasValue)
                {
                    if (!dtpFim.Value.HasValue)
                    {
                        InformarDataFinalObrigatoria();
                        return false;
                    }
                }
                else if (dtpFim.Value.HasValue)
                {
                    if (!dtpInicio.Value.HasValue)
                    {
                        InformarDataInicialObrigatoria();
                        return false;
                    }
                }
            }
            #endregion

            if (cboBolsa.SelectedIndex > -1) filtro = true;
            if (cboMercado.SelectedIndex > -1)filtro = true;
            if (cboMercadoOrigem.SelectedIndex > -1) filtro = true;

            if (!filtro)
                InformarMaisFiltroPesquisa(); 

            return filtro; 
        }

        private void ValidaPeriodo()
        {
            if (dtgTaxas.GetInsertionRow().PanelInsertTemplate.DataType == null) return;

            Model.Periodo periodo = new Model.Periodo();

            if (dtgTaxas.IsInserting)
            {
                periodo.DataInicial = ((SinacorDatePicker)ControlHelper.FindChild((BaseRow)dtgTaxas.GetInsertionRow(), InicioTpt)).Value;
                periodo.DataFinal = ((SinacorDatePicker)ControlHelper.FindChild((BaseRow)dtgTaxas.GetInsertionRow(), FimTpt)).Value;
            }
            else if (dtgTaxas.IsUpdating)
            {
                periodo.DataInicial = ((SinacorDatePicker)ControlHelper.FindChild((BaseRow)dtgTaxas.GetRow(dtgTaxas.EditIndex), InicioTpt)).Value;
                periodo.DataFinal = ((SinacorDatePicker)ControlHelper.FindChild((BaseRow)dtgTaxas.GetRow(dtgTaxas.EditIndex), FimTpt)).Value;
            }
            if (periodo.DataInicial.HasValue && periodo.DataFinal.HasValue)
            {
                if (periodo.DataFinal.Value < periodo.DataInicial.Value)
                    InformarDataFinalMenorDataInicial();
            }
           
        }

        private SinacorComboBox ComboBox(CancelItemEventArgs e,string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorComboBox;
        }

        private SinacorComboBox ComboBox(ItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorComboBox;
        }

        private SinacorRadioButton RadioButton(CancelItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorRadioButton;
        }

        private SinacorRadioButton RadioButton(ItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorRadioButton;
        }

        private SinacorDatePicker DatePicker(ItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorDatePicker;
        }

        private SinacorDatePicker DatePicker(CancelItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorDatePicker;
        }
         
        private SinacorDecimalTextBox DecimalTextBox(CancelItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorDecimalTextBox;
        }

        private SinacorDecimalTextBox DecimalTextBox(ItemEventArgs e, string parametro)
        {
            return ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorDecimalTextBox;
        }
        private void FormularioEditar(ItemEventArgs e,bool parametro)
        {
            RadioButton(e, CompraTpt).IsEnabled = parametro;
            RadioButton(e, VendaTpt).IsEnabled = parametro;

            DatePicker(e, InicioTpt).IsEnabled = parametro;
            DatePicker(e, FimTpt).IsEnabled = parametro;

            ComboBox(e, BolsaTpt).IsEnabled = parametro;
            ComboBox(e, MercadoTpt).IsEnabled = parametro;
            ComboBox(e, MercadoOrigemTpt).IsEnabled = parametro;

            ComboBox(e, OperacaoTpt).IsEnabled = parametro;
            ComboBox(e, ClienteTpt).IsEnabled = parametro;

            ComboBox(e, AtivoTpt).IsEnabled = parametro;
            ComboBox(e, LiquidacaoTpt).IsEnabled = parametro;
        }

        private void PesquisaEditar(bool parametro)
        {
            rdbCompra.IsEnabled = parametro;
            rdbVenda.IsEnabled = parametro;

            dtpInicio.IsEnabled = parametro;
            dtpFim.IsEnabled = parametro;

            cboBolsa.IsEnabled = parametro;
            cboMercado.IsEnabled = parametro;
            cboMercadoOrigem.IsEnabled = parametro;

            btnPesquisar.IsEnabled = parametro;
            btnNovaPesquisa.IsEnabled = parametro;
        }

        private void MensagemControlesFormulario(ItemEventArgs e)
        {
            DatePicker(e, InicioTpt).RequiredErrorMessage = Informardatainicialobrigatoria;
            DatePicker(e, FimTpt).RequiredErrorMessage = Informardatafinalobrigatoria;

            ComboBox(e, BolsaTpt).RequiredErrorMessage = informarcodigobolsaobrigatorio;
            ComboBox(e, MercadoTpt).RequiredErrorMessage = Informarmercadoobrigatorio;
            ComboBox(e, MercadoOrigemTpt).RequiredErrorMessage = Informarmercadoorigemobrigatorio;

            ComboBox(e, OperacaoTpt).RequiredErrorMessage = Informartipooperacaoobrigatorio;

            ComboBox(e, ClienteTpt).RequiredErrorMessage = Informartipoclienteobrigatorio;
            ComboBox(e, AtivoTpt).RequiredErrorMessage = Informartipopapelobrigatorio;
            ComboBox(e, LiquidacaoTpt).RequiredErrorMessage = Informartipoliquidacaoobrigatorio;

            DecimalTextBox(e, ValorEmolumentoBovespaTpt).RequiredErrorMessage = Informarpercemolumentobovespaobrigatorio;
            DecimalTextBox(e, ValorEmolumentoCBLCTpt).RequiredErrorMessage = Informarpercemolumentocblcobrigatorio;

            DecimalTextBox(e, ValorRegistroBovespaTpt).RequiredErrorMessage = Informarpercregistrobovespaobrigatorio;
            DecimalTextBox(e, ValorRegistroCBLCTpt).RequiredErrorMessage = Informarpercregistrocblcobrigatorio;  

        }

        private void LimparControlesFormulario(ItemEventArgs e)
        {
            RadioButton(e, CompraTpt).IsChecked = false;
            RadioButton(e, VendaTpt).IsChecked = false;

            DatePicker(e, InicioTpt).Value = null;
            DatePicker(e, FimTpt).Value = null;

            ComboBox(e, BolsaTpt).SelectedIndex  = -1;
            ComboBox(e, MercadoTpt).SelectedIndex = -1;
            ComboBox(e, MercadoOrigemTpt).SelectedIndex = -1;

            ComboBox(e, OperacaoTpt).SelectedIndex = -1;

            ComboBox(e, ClienteTpt).SelectedIndex = -1;
            ComboBox(e, AtivoTpt).SelectedIndex = -1;
            ComboBox(e, LiquidacaoTpt).SelectedIndex = -1;

            DecimalTextBox(e, ValorEmolumentoBovespaTpt).Value = null;
            DecimalTextBox(e, ValorEmolumentoCBLCTpt).Value = null;

            DecimalTextBox(e, ValorRegistroBovespaTpt).Value = null;
            DecimalTextBox(e, ValorRegistroCBLCTpt).Value = null;

        }

        private void ControlesObrigatoriosFormulario(CancelItemEventArgs e, bool parametro)
        {
            DatePicker(e, InicioTpt).IsRequired = parametro;
            DatePicker(e, FimTpt).IsRequired = parametro;

            
            ComboBox(e, BolsaTpt).IsRequired = parametro;
            ComboBox(e, MercadoTpt).IsRequired = parametro;
            ComboBox(e, MercadoOrigemTpt).IsRequired = parametro;

            ComboBox(e, OperacaoTpt).IsRequired = parametro;
            ComboBox(e, ClienteTpt).IsRequired = parametro;
            ComboBox(e, AtivoTpt).IsRequired = parametro;

            ComboBox(e, LiquidacaoTpt).IsRequired = parametro;

            DecimalTextBox(e, ValorEmolumentoBovespaTpt).IsRequired = true;
            DecimalTextBox(e, ValorEmolumentoCBLCTpt).IsRequired = true; 

            DecimalTextBox(e, ValorRegistroBovespaTpt).IsRequired = true; 
            DecimalTextBox(e, ValorRegistroCBLCTpt).IsRequired = true; 

        }

        private void ControlesObrigatoriosFormulario(ItemEventArgs e, bool parametro)
        {
            DatePicker(e, InicioTpt).IsRequired = parametro;
            DatePicker(e, FimTpt).IsRequired = parametro;


            ComboBox(e, BolsaTpt).IsRequired = parametro;
            ComboBox(e, MercadoTpt).IsRequired = parametro;
            ComboBox(e, MercadoOrigemTpt).IsRequired = parametro;

            ComboBox(e, OperacaoTpt).IsRequired = parametro;
            ComboBox(e, ClienteTpt).IsRequired = parametro;
            ComboBox(e, AtivoTpt).IsRequired = parametro;

            ComboBox(e, LiquidacaoTpt).IsRequired = parametro;

            DecimalTextBox(e, ValorEmolumentoBovespaTpt).IsRequired = parametro;
            DecimalTextBox(e, ValorEmolumentoCBLCTpt).IsRequired = parametro;

            DecimalTextBox(e, ValorRegistroBovespaTpt).IsRequired = parametro;
            DecimalTextBox(e, ValorRegistroCBLCTpt).IsRequired = parametro;

        }

        private void ValidaFormulario(CancelItemEventArgs e)
        {
            if (!RadioButton(e, CompraTpt).IsChecked.Value && !RadioButton(e, VendaTpt).IsChecked.Value)
                InformarNaturezaOperacaoObrigatoriaTPT(); 

                if (DatePicker(e, FimTpt).Value < DatePicker(e, InicioTpt).Value)
                    InformarDataFinalMenorDataInicialTPT(); 
        }
        
        
        #endregion

        #region Public
        public void AtualizarCombo(ItemEventArgs e, string parametro)
        {
            SinacorComboBox combobox = ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorComboBox;

            combobox.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
        }

        public void AtualizarCombo(ItemEventArgs e, string parametro, string ordenar)
        {
            SinacorComboBox combobox = ControlHelper.FindChild((BaseRow)e.OriginalSource, parametro) as SinacorComboBox;

            combobox.UpdateTarget(SinacorComboBox.ItemsSourceProperty);

            combobox.Items.SortDescriptions.Add(new SortDescription(ordenar, ListSortDirection.Ascending));
        }

        public void AtualizarPeriodo()
        {
            dtpInicio.Value = null;            
            dtpInicio.UpdateTarget(SinacorDatePicker.ValueProperty);
            dtpFim.Value = null;
            dtpFim.UpdateTarget(SinacorDatePicker.ValueProperty);
        }

        public void AtualizarNaturezaOperacao()
        {
            rdbCompra.IsChecked  = false;
            rdbCompra.UpdateTarget(SinacorRadioButton.IsCheckedProperty);

            rdbVenda.IsChecked = false;
            rdbVenda.UpdateTarget(SinacorRadioButton.IsCheckedProperty); 
            
        }

        public void AtualizarBolsa()
        {
            cboBolsa.SelectedIndex = -1;
            cboBolsa.UpdateTarget(SinacorComboBox.ItemsSourceProperty);            
        }

        public void AtualizarMercado()
        {
            cboMercado.SelectedIndex = -1;
            cboMercado.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            cboMercado.Items.SortDescriptions.Add(new SortDescription("Descricao", ListSortDirection.Ascending));
        }

        public void AtualizarMercadoOrigem()
        {
            cboMercadoOrigem.SelectedIndex = -1;
            cboMercadoOrigem.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            cboMercadoOrigem.Items.SortDescriptions.Add(new SortDescription("Descricao", ListSortDirection.Ascending));
        }

        public void AtualizarNovaPesquisa()
        {
            AtualizarNaturezaOperacao();
            AtualizarPeriodo();
            AtualizarBolsa();

            AtualizarMercado();
            AtualizarMercadoOrigem();

            AtualizarPeriodo(); 

            PresenterCadastroTaxa.Taxas.Clear();   
            AtualizarTaxas();

        }

        public void AtualizarTaxas()
        {            
            dtgTaxas.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }
        
        public bool ConfirmarExclusaoTaxa()
        {            
              SinacorMessageBoxResult confirmacao = SinacorMessageBox.Show(this.FindResource("Bovespa.Corretagem.Message.ConfirmaExclusaoTaxa").ToString(), SinacorMessageBoxButton.YesNo,SinacorMessageBoxImage.Question);
         
            return confirmacao == SinacorMessageBoxResult.Yes? true:false;
            
        }

        public void InformarCodigoBolsaObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(informarcodigobolsaobrigatorio).ToString());  
        }

        public void InformarDataFinalMenorDataInicialTPT()
        {
            //ShowError(Informardatafinalmenordatainicial);
        }

        public void InformarDataFinalMenorDataInicial()
        {
            SinacorMessageBox.Show(FindResource(Informardatafinalmenordatainicial).ToString(), SinacorMessageBoxImage.Exclamation);    
        }
        
        public void InformarDataFinalObrigatoria()
        {
            SinacorMessageBox.Show(FindResource(Informardatafinalobrigatoria).ToString(), SinacorMessageBoxImage.Exclamation);    
        }

        public void InformarDataInicialObrigatoria()
        {
            SinacorMessageBox.Show(FindResource(Informardatainicialobrigatoria).ToString(), SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarMaisFiltroPesquisa()
        {
            SinacorMessageBox.Show(FindResource(Informarmaisfiltropesquisa).ToString(),SinacorMessageBoxButton.Ok,SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarMercadoObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informarmercadoobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarMercadoOrigemObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informarmercadoorigemobrigatorio).ToString(),SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarNaturezaOperacaoObrigatoria()
        {
            SinacorMessageBox.Show(FindResource(Informarnaturezaoperacaoobrigatoria).ToString(),SinacorMessageBoxImage.Exclamation) ;  
        }
        public void InformarNaturezaOperacaoObrigatoriaTPT()
        {
            ShowError(Informarnaturezaoperacaoobrigatoria);
        }

        public void InformarNenhumaTaxaEncontrada()
        {
            SinacorMessageBox.Show(FindResource(Informarnenhumataxaencontrada).ToString(),SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarPeriodoInvalido()
        {
            SinacorMessageBox.Show(FindResource(Informarperiodoinvalido).ToString(), SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarTaxaAlteradaSucesso()
        {
            SinacorMessageBox.Show(FindResource(Informartaxaalteradasucesso).ToString(), SinacorMessageBoxImage.Information);  
        }

        public void InformarTaxaExcluidaSucesso()
        {
            SinacorMessageBox.Show(FindResource(Informartaxaexcluidasucesso).ToString(), SinacorMessageBoxImage.Information);  
        }

        public void InformarTaxaIncluidaSucesso()
        {
            SinacorMessageBox.Show(FindResource(Informartaxaincluidasucesso).ToString(), SinacorMessageBoxImage.Information);  
        }

        public void InformarTipoClienteObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informartipoclienteobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarTipoLiquidacaoObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informartipoliquidacaoobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarTipoOperacaoObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informartipooperacaoobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);  
        }

        public void InformarTipoPapelObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informartipopapelobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);
        }

        public void InformarPercEmolumentoBovespaObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informarpercemolumentobovespaobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);
        }

        public void InformarPercEmolumentoCBLCObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informarpercemolumentocblcobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);
        }

        public void InformarPercRegistroBovespaObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informarpercregistrobovespaobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);
        }

        public void InformarPercRegistroCBLCObrigatorio()
        {
            SinacorMessageBox.Show(FindResource(Informarpercregistrocblcobrigatorio).ToString(), SinacorMessageBoxImage.Exclamation);
        }

        #endregion


        #endregion

    }
}
